স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি (STL) হলো C++ এর একটি শক্তিশালী লাইব্রেরি, যা বিভিন্ন ডেটা স্ট্রাকচার এবং অ্যালগরিদম সহজেই ব্যবহারের জন্য টেমপ্লেট আকারে সরবরাহ করে। STL ডেটা পরিচালনা ও অপারেশনগুলো দ্রুত এবং কার্যকরভাবে সম্পাদন করার সুবিধা দেয়। STL এর মূলত তিনটি প্রধান উপাদান রয়েছে: কনটেইনার (Containers), ইটারেটর (Iterators) এবং অ্যালগরিদম (Algorithms)।
কনটেইনার হলো এমন কিছু ডেটা স্ট্রাকচার, যা ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। STL এ বিভিন্ন ধরনের কনটেইনার আছে, যেমন vector
, list
, deque
, set
, map
ইত্যাদি।
সিকোয়েন্সিয়াল কনটেইনার: এই কনটেইনারগুলো লিনিয়ার অর্ডারে ডেটা সংরক্ষণ করে। যেমন, vector
, list
, deque
।
অ্যাসোসিয়েটিভ কনটেইনার: এই কনটেইনারগুলো কী-ভ্যালু পেয়ার আকারে ডেটা সংরক্ষণ করে এবং স্বয়ংক্রিয়ভাবে সাজানো থাকে। যেমন, set
, map
, multiset
, multimap
।
ডেরাইভড কনটেইনার (Derived Containers): এই কনটেইনারগুলো অ্যাডাপ্টার হিসেবে কাজ করে। যেমন, stack
, queue
, priority_queue
।
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = {1, 2, 3, 4, 5};
// মান প্রিন্ট করা
for (int i = 0; i < numbers.size(); i++) {
cout << numbers[i] << " ";
}
numbers.push_back(6); // নতুন মান যোগ করা
cout << "\nAfter push_back: ";
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
ইটারেটর হলো একটি পয়েন্টার বা অবজেক্ট, যা কনটেইনারের প্রতিটি উপাদানে অ্যাক্সেস করতে সাহায্য করে। ইটারেটর কনটেইনারের প্রতিটি এলিমেন্টের উপর লুপ চালাতে ব্যবহৃত হয়।
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = {10, 20, 30, 40, 50};
// ইটারেটর ব্যবহার করে প্রিন্ট করা
for (vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
cout << *it << " ";
}
return 0;
}
বর্ণনা:
vector<int>::iterator
ব্যবহার করে numbers
ভেক্টরের প্রতিটি উপাদান অ্যাক্সেস করা হয়েছে।STL এ কিছু সাধারণ অ্যালগরিদম অন্তর্ভুক্ত রয়েছে, যেমন সাজানো (sorting), অনুসন্ধান (searching), মোছা (deletion), ইত্যাদি। অ্যালগরিদমগুলো কনটেইনারের উপর কাজ করে এবং কার্য সম্পাদন করে।
#include <iostream>
#include <vector>
#include <algorithm> // অ্যালগরিদম লাইব্রেরি অন্তর্ভুক্ত
using namespace std;
int main() {
vector<int> numbers = {50, 20, 40, 10, 30};
// sorting
sort(numbers.begin(), numbers.end());
cout << "Sorted vector: ";
for (int num : numbers) {
cout << num << " ";
}
// searching
if (binary_search(numbers.begin(), numbers.end(), 30)) {
cout << "\n30 found in the vector.";
} else {
cout << "\n30 not found in the vector.";
}
return 0;
}
বর্ণনা:
sort()
ফাংশন ব্যবহার করে numbers
ভেক্টরকে সাজানো হয়েছে।binary_search()
ফাংশন ব্যবহার করে numbers
ভেক্টরে ৩০ মানটি আছে কিনা তা যাচাই করা হয়েছে।vector
, list
, map
।STL C++ প্রোগ্রামিংয়ে ডেটা ম্যানিপুলেশন, ডেটা স্ট্রাকচার এবং অ্যালগরিদম ব্যবহারের ক্ষেত্রে অত্যন্ত কার্যকর একটি টুল, যা কোড লেখাকে সহজ ও দ্রুত করে তোলে।
STL বা Standard Template Library হলো C++ এর একটি গুরুত্বপূর্ণ লাইব্রেরি, যা বিভিন্ন ধরনের ডেটা স্ট্রাকচার, অ্যালগরিদম এবং ইটারেটর সরবরাহ করে। STL এর মূল লক্ষ্য হলো প্রোগ্রামিংকে আরও কার্যকর, সংক্ষিপ্ত এবং দ্রুতগতির করা। STL প্রাথমিকভাবে তিনটি অংশ নিয়ে গঠিত: কন্টেইনার (Containers), অ্যালগরিদম (Algorithms) এবং ইটারেটর (Iterators)। STL ব্যবহার করে প্রোগ্রামাররা খুব সহজে ডেটা ম্যানেজমেন্ট এবং ডেটা প্রসেসিং করতে পারে।
পুনঃব্যবহারযোগ্য কোড: STL-এ প্রি-ডিফাইন্ড ডেটা স্ট্রাকচার এবং অ্যালগরিদম থাকে, যা প্রোগ্রামারদের পুনঃব্যবহারযোগ্য কোড লেখার সুযোগ দেয়।
কোডের সরলতা এবং সংক্ষিপ্ততা: STL ব্যবহারে কোড অনেক সংক্ষিপ্ত এবং সহজবোধ্য হয়। সাধারণ ডেটা ম্যানিপুলেশন এবং ডেটা সংরক্ষণের জন্য STL কন্টেইনার ব্যবহার করে সহজেই কার্যকর কোড লেখা যায়।
দক্ষতা এবং পারফরম্যান্স বৃদ্ধি: STL-এর কন্টেইনার এবং অ্যালগরিদম অত্যন্ত দক্ষ, এবং এটি মেমোরি ব্যবস্থাপনায় পারফরম্যান্স বৃদ্ধি করে।
ডেটা স্ট্রাকচার সহজে ব্যবহারের সুবিধা: STL-এ বিভিন্ন প্রকার ডেটা স্ট্রাকচার (যেমন ভেক্টর, লিস্ট, সেট, ম্যাপ ইত্যাদি) থাকে, যা বড় ডেটা ম্যানেজমেন্টকে সহজ করে। এই ডেটা স্ট্রাকচারগুলো নিজস্ব মেমোরি ম্যানেজমেন্ট এবং ডেটা অ্যাক্সেস পদ্ধতি সরবরাহ করে।
অ্যালগরিদমের সমৃদ্ধ সংগ্রহ: STL বিভিন্ন ধরনের অ্যালগরিদম যেমন sort()
, search()
, reverse()
, accumulate()
, ইত্যাদি প্রদান করে। এই অ্যালগরিদমগুলো ব্যবহার করে দ্রুত ও কার্যকরভাবে ডেটা ম্যানিপুলেট করা যায়।
ইটারেটর ব্যবহারের সুবিধা: STL এর ইটারেটর প্রোগ্রামারদের ডেটা অ্যাক্সেসের জন্য একটি সাধারণ ইন্টারফেস প্রদান করে, যা বিভিন্ন ধরনের কন্টেইনারের ডেটা সহজে অ্যাক্সেস এবং ম্যানিপুলেট করতে সহায়ক।
কন্টেইনার (Containers): কন্টেইনার হলো STL এর ডেটা স্ট্রাকচার, যা ডেটা সংরক্ষণ করতে ব্যবহৃত হয়। কন্টেইনার সাধারণত দুটি প্রকারের হয়:
vector
, deque
, list
, array
, ইত্যাদি। এগুলো সিকোয়েন্স বা ক্রমানুসারে ডেটা সংরক্ষণ করে।set
, map
, multiset
, multimap
। এগুলো কীগুলোর সাথে ডেটা সংরক্ষণ করে এবং সাধারণত দ্রুত অনুসন্ধানের জন্য ব্যবহৃত হয়।অ্যালগরিদম (Algorithms): STL এ প্রি-ডিফাইন্ড বিভিন্ন অ্যালগরিদম রয়েছে, যেমন sort
, find
, search
, reverse
, accumulate
ইত্যাদি, যা কন্টেইনারের উপর অপারেশন সম্পাদন করতে ব্যবহৃত হয়। এগুলো দক্ষ ও দ্রুত অপারেশন পরিচালনার জন্য বিশেষভাবে তৈরি।
ইটারেটর (Iterators): ইটারেটর হলো একটি পয়েন্টারের মতো, যা কন্টেইনারের উপাদানগুলোর উপর লুপ চালাতে ব্যবহার করা হয়। ইটারেটরের মাধ্যমে কন্টেইনারের বিভিন্ন উপাদানে সরাসরি অ্যাক্সেস করা যায় এবং সহজে অপারেশন পরিচালনা করা যায়।
#include <iostream>
#include <vector>
#include <algorithm> // sort ফাংশনের জন্য
using namespace std;
int main() {
vector<int> numbers = {5, 2, 8, 1, 3};
// STL sort অ্যালগরিদম ব্যবহার করে সংখ্যা সজ্জিত করা
sort(numbers.begin(), numbers.end());
// ইটারেটর ব্যবহার করে উপাদান প্রদর্শন করা
for (vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
cout << *it << " ";
}
cout << endl;
return 0;
}
বর্ণনা:
vector
নামে একটি STL কন্টেইনার ব্যবহার করা হয়েছে, যা একটি সংখ্যা সজ্জিত করতে সহায়ক।sort()
অ্যালগরিদম ব্যবহার করে ভেক্টরের উপাদানগুলো সাজানো হয়েছে।iterator
ব্যবহার করে সাজানো উপাদানগুলো প্রিন্ট করা হয়েছে।কন্টেইনার | বর্ণনা |
---|---|
vector | ডাইনামিক অ্যারে, যেটি সিকোয়েন্সে ডেটা সংরক্ষণ করে এবং ইনডেক্সের মাধ্যমে অ্যাক্সেস করা যায়। |
list | ডাবলি লিংকড লিস্ট, যেখানে সিকোয়েন্সে ডেটা সংরক্ষণ হয় এবং ইনসার্ট এবং ডিলিট অপারেশন সহজে করা যায়। |
deque | ডাবল-এন্ডেড কিউ, যা অ্যারের মতো, তবে সামনে এবং পেছনে উভয় দিকে থেকে উপাদান যোগ বা মুছা যায়। |
set | ইউনিক উপাদান সংরক্ষণ করে এবং সাধারণত এদের বাছাই করা অবস্থায় রাখে। |
map | কীগুলোর মাধ্যমে ভ্যালু সংরক্ষণ করে, যা key-value পেয়ার হিসেবে পরিচিত। |
stack | LIFO (Last In, First Out) নীতিতে ডেটা সংরক্ষণ করে। |
queue | FIFO (First In, First Out) নীতিতে ডেটা সংরক্ষণ করে। |
set
এবং map
কন্টেইনার#include <iostream>
#include <set>
#include <map>
using namespace std;
int main() {
// set ব্যবহার করে ইউনিক উপাদান সংরক্ষণ করা
set<int> numbers = {5, 2, 8, 1, 3, 5}; // ৫টি ইউনিক উপাদান থাকবে
for (int num : numbers) {
cout << num << " "; // Output: 1 2 3 5 8
}
cout << endl;
// map ব্যবহার করে key-value পেয়ার সংরক্ষণ করা
map<string, int> age;
age["Alice"] = 25;
age["Bob"] = 30;
for (auto &entry : age) {
cout << entry.first << " is " << entry.second << " years old." << endl;
}
return 0;
}
বর্ণনা:
set
ব্যবহার করে ইউনিক সংখ্যাগুলো সংরক্ষণ করা হয়েছে এবং সংখ্যাগুলো স্বয়ংক্রিয়ভাবে সাজানো হয়েছে।map
ব্যবহার করে key-value
পেয়ার সংরক্ষণ করা হয়েছে এবং first
ও second
এর মাধ্যমে key
এবং value
অ্যাক্সেস করা হয়েছে।STL ব্যবহার করে প্রোগ্রামাররা জটিল ডেটা স্ট্রাকচার এবং অ্যালগরিদম নিয়ে সহজেই কাজ করতে পারেন, যা বড় প্রোগ্রামিং প্রকল্পে খুবই সহায়ক।
ভেক্টর (vector), লিস্ট (list), ডেক (deque), এবং সেট (set) হলো C++ স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরির (STL) কিছু গুরুত্বপূর্ণ কনটেইনার, যা বিভিন্ন ধরনের ডেটা স্ট্রাকচার সরবরাহ করে। প্রতিটি কনটেইনারের নিজস্ব বৈশিষ্ট্য ও ব্যবহারের উদ্দেশ্য রয়েছে। নিচে প্রতিটি কনটেইনারের ব্যাখ্যা ও উদাহরণ প্রদান করা হলো।
ভেক্টর হলো C++ এর ডাইনামিক অ্যারে। এটি আকারে বাড়তে বা কমতে পারে, এবং ইনডেক্সের মাধ্যমে দ্রুত অ্যাক্সেস করা যায়। ভেক্টর sequence container
হিসেবে কাজ করে, যা ডেটা সংরক্ষণ করতে ধারাবাহিক মেমোরি লোকেশন ব্যবহার করে।
push_back
এবং pop_back
ফাংশনের মাধ্যমে শেষে উপাদান যোগ ও মুছা যায়।#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = {10, 20, 30};
// মান যোগ করা
numbers.push_back(40);
numbers.push_back(50);
// মান প্রিন্ট করা
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
আউটপুট:
10 20 30 40 50
লিস্ট হলো ডাবল-লিঙ্কড লিস্ট, যা STL এর আরেকটি কনটেইনার। লিস্টে উপাদানগুলো ক্রম অনুযায়ী সংরক্ষণ করা হয়। লিস্টে সামনে বা পেছনে উপাদান যোগ ও মুছা সহজ, তবে ইনডেক্সের মাধ্যমে সরাসরি অ্যাক্সেস করা সম্ভব নয়।
#include <iostream>
#include <list>
using namespace std;
int main() {
list<int> numbers = {10, 20, 30};
// সামনে ও পেছনে মান যোগ করা
numbers.push_front(5);
numbers.push_back(40);
// মান প্রিন্ট করা
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
আউটপুট:
5 10 20 30 40
ডেক হলো ডাবল-এন্ডেড কিউ (Double-Ended Queue)। এটি এমন একটি কনটেইনার, যেখানে সামনে ও পেছনে উভয় দিক থেকে উপাদান যোগ ও মুছা যায়। ডেক sequence container
হিসেবে কাজ করে, এবং এটি ভেক্টরের মতোই দ্রুত অ্যাক্সেসযোগ্য।
#include <iostream>
#include <deque>
using namespace std;
int main() {
deque<int> numbers = {10, 20, 30};
// সামনে ও পেছনে মান যোগ করা
numbers.push_front(5);
numbers.push_back(40);
// মান প্রিন্ট করা
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
আউটপুট:
5 10 20 30 40
সেট হলো অ্যাসোসিয়েটিভ কনটেইনার, যেখানে উপাদানগুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে এবং প্রতিটি উপাদান ইউনিক হয়, অর্থাৎ ডুপ্লিকেট মেম্বার থাকে না। set
সাধারণত ডেটা অনুসন্ধান ও অনন্য মান সংরক্ষণের জন্য ব্যবহৃত হয়।
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> numbers = {30, 10, 20, 20, 40};
// মান প্রিন্ট করা (সাজানো এবং ইউনিক মান)
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
আউটপুট:
10 20 30 40
কনটেইনার | বর্ণনা | অ্যাক্সেস টাইপ | বিশেষ বৈশিষ্ট্য |
---|---|---|---|
vector | ডাইনামিক অ্যারে | ইনডেক্স | দ্রুত ইনডেক্স অ্যাক্সেস |
list | ডাবল-লিঙ্কড লিস্ট | ইনডেক্সবিহীন | দ্রুত সামনে-পেছনে যোগ-মুছা |
deque | ডাবল-এন্ডেড কিউ | ইনডেক্স | সামনে ও পেছনে যোগ-মুছা |
set | স্বয়ংক্রিয়ভাবে সাজানো, ইউনিক মান | ইনডেক্সবিহীন | ডুপ্লিকেট মান রাখে না |
vector
ব্যবহার করুন।list
ব্যবহার করা সেরা।deque
ব্যবহার করুন।set
ব্যবহার করুন।STL এর এই কনটেইনারগুলো বিভিন্ন পরিস্থিতিতে ডেটা সংরক্ষণ ও ব্যবস্থাপনা করতে কার্যকরভাবে সাহায্য করে।
ম্যাপ (Map) হলো C++ STL-এর একটি কন্টেইনার, যা কী-ভ্যালু (key-value) পেয়ার আকারে ডেটা সংরক্ষণ করে। প্রতিটি key
এর জন্য একটি নির্দিষ্ট value
থাকে, যা ম্যাপের মধ্যে সংরক্ষণ করা হয়। ম্যাপে প্রতিটি key
ইউনিক হতে হয়, তবে value
একাধিক key
এর জন্য একই হতে পারে। C++ এ map
সাধারণত map
এবং unordered_map
এই দুটি রকমের হতে পারে।
key
গুলো স্বয়ংক্রিয়ভাবে সাজানো অবস্থায় থাকে।key
গুলো সাজানো অবস্থায় থাকে না, বরং hashing
ব্যবহার করে সংরক্ষণ করা হয়।map
এর বৈশিষ্ট্যmap
কন্টেইনারে প্রতিটি key
ইউনিক হতে হয়।map
কন্টেইনারে key
গুলো স্বয়ংক্রিয়ভাবে সাজানো থাকে।key
এর মাধ্যমে সরাসরি value
অ্যাক্সেস করা যায়।map
Red-Black tree
ডেটা স্ট্রাকচার ব্যবহার করে, যা O(log n) কমপ্লেক্সিটিতে অ্যাক্সেস দেয়।key
না থাকলে, ডিফল্ট value
তৈরি করা হয়।map
ঘোষণা এবং ব্যবহারmap
ঘোষণা করার সময় key
এবং value
এর ডেটা টাইপ উল্লেখ করতে হয়। map
সাধারণত #include <map>
লাইব্রেরি থেকে ইমপোর্ট করে ব্যবহার করা হয়।
#include <iostream>
#include <map>
using namespace std;
int main() {
// map ঘোষণা করা
map<string, int> age;
// মান অ্যাসাইন করা
age["Alice"] = 25;
age["Bob"] = 30;
age["Charlie"] = 28;
// মান প্রদর্শন করা
for (const auto& entry : age) {
cout << entry.first << " is " << entry.second << " years old." << endl;
}
return 0;
}
আউটপুট:
Alice is 25 years old.
Bob is 30 years old.
Charlie is 28 years old.
বর্ণনা:
age
নামের একটি map
তৈরি করা হয়েছে, যার key
হলো string
এবং value
হলো int
।age["Alice"] = 25;
এর মাধ্যমে Alice
নামের ব্যক্তির বয়স 25
সংরক্ষণ করা হয়েছে।for
লুপ ব্যবহার করে প্রতিটি key-value
পেয়ার প্রিন্ট করা হয়েছে।map
এর সাধারণ মেথডমেথড | কাজ |
---|---|
insert() | key-value পেয়ার ইনসার্ট করতে ব্যবহার করা হয়। |
erase() | নির্দিষ্ট key বা পজিশন থেকে key-value পেয়ার মুছে দেয়। |
find() | একটি key খুঁজে বের করে এবং ইটারেটর রিটার্ন করে। |
size() | map এর মোট উপাদানের সংখ্যা রিটার্ন করে। |
clear() | map এর সমস্ত উপাদান মুছে দেয়। |
count() | একটি নির্দিষ্ট key ম্যাপে আছে কিনা তা যাচাই করে। |
empty() | map খালি কিনা তা যাচাই করে। |
insert
, erase
, find
, এবং count
মেথড#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> age;
// ডেটা ইনসার্ট করা
age.insert({"Alice", 25});
age.insert({"Bob", 30});
age.insert({"Charlie", 28});
// নির্দিষ্ট key খোঁজা এবং প্রিন্ট করা
auto it = age.find("Alice");
if (it != age.end()) {
cout << "Alice's age: " << it->second << endl;
}
// নির্দিষ্ট key মুছে ফেলা
age.erase("Bob");
// একটি key আছে কিনা চেক করা
if (age.count("Bob") == 0) {
cout << "Bob is not in the map." << endl;
}
return 0;
}
আউটপুট:
Alice's age: 25
Bob is not in the map.
বর্ণনা:
age.insert({"Alice", 25});
দ্বারা নতুন key-value
পেয়ার ইনসার্ট করা হয়েছে।age.find("Alice");
দ্বারা Alice
এর তথ্য খুঁজে বের করা হয়েছে।age.erase("Bob");
দিয়ে Bob
এর এন্ট্রি মুছে ফেলা হয়েছে।age.count("Bob")
দিয়ে চেক করা হয়েছে যে Bob
ম্যাপে নেই।unordered_map
ব্যবহারunordered_map
একইভাবে কাজ করে তবে key
-গুলো সাজানো থাকে না।
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
unordered_map<string, int> age;
// ডেটা ইনসার্ট করা
age["Alice"] = 25;
age["Bob"] = 30;
age["Charlie"] = 28;
// unordered_map এ মান প্রিন্ট করা
for (const auto& entry : age) {
cout << entry.first << " is " << entry.second << " years old." << endl;
}
return 0;
}
বর্ণনা:
unordered_map
ব্যবহৃত হয়েছে, যেখানে key
-এর ক্রম ঠিক থাকে না।unordered_map
hashing
ব্যবহার করে।map
এবং unordered_map
এর পার্থক্যবৈশিষ্ট্য | map | unordered_map |
---|---|---|
ডেটা স্টোরেজ | key -এর ক্রম অনুযায়ী সংরক্ষণ করে | ডেটা ক্রমানুসারে থাকে না |
অ্যাক্সেস টাইম | O(log n) | গড়ে O(1), তবে সবচেয়ে খারাপ ক্ষেত্রে O(n) |
ডেটা স্ট্রাকচার | Red-Black Tree ব্যবহার করে | Hash Table ব্যবহার করে |
ব্যবহার | যখন ডেটা ক্রমানুসারে দরকার | যখন দ্রুত অ্যাক্সেস প্রয়োজন এবং ক্রম গুরুত্বপূর্ণ নয় |
map
এবং unordered_map
উভয়ই দ্রুত key-value
স্টোরেজ এবং রিট্রিভাল সরবরাহ করে।key
ইউনিক হওয়ার কারণে ডুপ্লিকেট এন্ট্রি থাকে না।key-value
পেয়ার ব্যবহার করে ডেটা স্টোরেজে সহজ অ্যাক্সেস এবং ম্যানেজমেন্ট সম্ভব।key-value
পেয়ার আকারে ডেটা সংরক্ষণ করে।map
এবং unordered_map
এই দুটি প্রকার রয়েছে।map
ডেটা ক্রমানুসারে সংরক্ষণ করে এবং unordered_map
ডেটা ক্রমানুসারে রাখে না।map
এবং unordered_map
কন্টেইনারগুলো প্রোগ্রামিংয়ে ডেটা ম্যানেজমেন্ট, দ্রুত অনুসন্ধান এবং বিভিন্ন অ্যালগরিদমে খুবই কার্যকর।
ইটারেটর (Iterator) হলো C++ স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি (STL) এর একটি উপাদান, যা কনটেইনারের উপাদানগুলোতে ধারাবাহিকভাবে অ্যাক্সেস করতে ব্যবহৃত হয়। ইটারেটরকে এক প্রকার "পয়েন্টার" বলা যেতে পারে, যা কনটেইনারের প্রতিটি উপাদানের ঠিকানাকে নির্দেশ করে এবং উপাদানগুলোতে লুপ চালাতে সাহায্য করে।
STL এ বিভিন্ন প্রকারের ইটারেটর রয়েছে, যেগুলো বিভিন্ন ধরনের কনটেইনারের উপাদানগুলোতে বিভিন্নভাবে অ্যাক্সেস করতে ব্যবহৃত হয়:
list
, set
, map
এর জন্য ব্যবহৃত হয়।vector
, deque
, array
এর জন্য ব্যবহৃত হয়।vector
কনটেইনারের উপাদান অ্যাক্সেস করা#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = {10, 20, 30, 40, 50};
// ইটারেটর ঘোষণা করা
vector<int>::iterator it;
// ইটারেটর ব্যবহার করে উপাদান প্রিন্ট করা
for (it = numbers.begin(); it != numbers.end(); ++it) {
cout << *it << " ";
}
return 0;
}
বর্ণনা:
vector<int>::iterator
ব্যবহার করে it
নামে একটি ইটারেটর তৈরি করা হয়েছে, যা numbers
ভেক্টরের প্রতিটি উপাদানে লুপ চালাতে সাহায্য করে।*it
দ্বারা প্রতিটি উপাদানের মান অ্যাক্সেস করা হয়েছে।আউটপুট:
10 20 30 40 50
ইটারেটর ব্যবহার করে শুধু কনটেইনারের উপাদান পড়া নয়, উপাদানে মান লিখাও সম্ভব। নিচে একটি উদাহরণ দেওয়া হলো।
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = {10, 20, 30, 40, 50};
// প্রতিটি উপাদান দ্বিগুণ করা
for (auto it = numbers.begin(); it != numbers.end(); ++it) {
*it *= 2;
}
// পরিবর্তিত মান প্রিন্ট করা
for (int num : numbers) {
cout << num << " ";
}
return 0;
}
আউটপুট:
20 40 60 80 100
বর্ণনা:
it
ইটারেটর ব্যবহার করে প্রতিটি উপাদানের মান দ্বিগুণ করা হয়েছে এবং পরিবর্তিত ভেক্টরের মান প্রিন্ট করা হয়েছে।#include <iostream>
#include <list>
#include <vector>
using namespace std;
int main() {
list<int> numList = {10, 20, 30, 40, 50};
vector<int> numVector = {5, 15, 25, 35, 45};
// bidirectional iterator - list এর জন্য
auto itList = numList.begin();
++itList;
cout << "Second element in list: " << *itList << endl;
// random access iterator - vector এর জন্য
auto itVector = numVector.begin();
itVector += 2; // তৃতীয় উপাদানে সরানো
cout << "Third element in vector: " << *itVector << endl;
return 0;
}
আউটপুট:
Second element in list: 20
Third element in vector: 25
বর্ণনা:
list
এবং vector
কনটেইনারের জন্য যথাক্রমে bidirectional এবং random access ইটারেটর ব্যবহার করা হয়েছে।numList
এ ++itList
ব্যবহার করে দ্বিতীয় উপাদানে পৌঁছানো হয়েছে এবং numVector
এ itVector += 2
ব্যবহার করে তৃতীয় উপাদানে পৌঁছানো হয়েছে।begin()
এবং end()
এর মাধ্যমে কনটেইনারের শুরু এবং শেষ চিহ্নিত করে।C++ এ ইটারেটর প্রোগ্রামিংকে আরো সহজ ও কার্যকর করে তোলে এবং কনটেইনারের উপাদানগুলির উপর নির্ভরশীল অপারেশনগুলোতে সুবিধা প্রদান করে।
common.read_more